package main

import "fmt"

func main() {
	//数组  长度是固定的，不可改变

	//1、数组的长度也是类型的一部分
	var arr1 [3]int
	var arr2 [4]int
	var arr3 [3]string

	fmt.Printf("arr1:%T,arr2:%T,arr3:%T\n", arr1, arr2, arr3) //arr1:[3]int,arr2:[4]int,arr3:[3]string

	//2、数组的初始化
	fmt.Println(arr1) // [0 0 0]
	fmt.Println(arr3) // [  ]

	//1、先声明 再下标赋值
	arr1[0] = 1
	arr1[1] = 2
	arr1[2] = 3
	fmt.Println(arr1) //[1 2 3]

	var strArr [3]string
	strArr[0] = "hello"
	strArr[1] = "world"
	strArr[2] = "!"
	fmt.Println(strArr) //[hello world !]

	//2、声明时赋值
	var arr4 = [4]int{1, 2, 3}
	fmt.Println(arr4) // [1,2,3,0]  第四项没有填充默认补0

	//3、不清楚长度时 三个点可以自动推导
	var arr5 = [...]int{123, 23, 241}
	// arr5[3]=3  这里不能赋值，超出范围
	fmt.Println(arr5)      // [123 23 241]
	fmt.Println(len(arr5)) //3

	//4、index类型声明，长度有index最大值确定
	arr6 := [...]int{0: 1, 1: 10, 2: 20, 5: 50} //前者是index 后者是val  无用0补气
	fmt.Println(len(arr6))                      // 6
	fmt.Println(arr6)                           //[1 10 20 0 0 50 ]

	//5、数组的循环遍历
	arr7 := [...]int{2, 4, 6, 1, 2, 6}
	for key, val := range arr7 {
		fmt.Println("key:", key, "val:", val)
	}

	//todo:  查找数组中的最大值和索引
	arr8 := [5]int{2, 5, 1, 7, 3}
	index := 0
	val := arr8[0]
	for i := 0; i < len(arr8); i++ {
		if arr8[i] > val {
			val = arr8[i]
			index = i
		}
	}
	fmt.Println(val, index)
}
